package com.w7vm.menuweb.managerBean;

import java.io.IOException;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;


import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.primefaces.context.RequestContext;
import org.primefaces.event.ItemSelectEvent;
import org.primefaces.extensions.util.DateUtils;

import com.w7vm.menuweb.entity.AlimentosTiposSy;
import com.w7vm.menuweb.entity.CardapioBuffetWeb;
import com.w7vm.menuweb.entity.CardapioEspecialidadeWeb;
import com.w7vm.menuweb.entity.CardapioInfantilWeb;
import com.w7vm.menuweb.entity.CardapioLaCarteWeb;
import com.w7vm.menuweb.entity.CardapioSelfServiceWeb;
import com.w7vm.menuweb.entity.ComposicaoCardBuffetWeb;
import com.w7vm.menuweb.entity.ComposicaoCardInfantilWeb;
import com.w7vm.menuweb.entity.ComposicaoCardLaCarteWeb;
import com.w7vm.menuweb.entity.ComposicaoCardSelfServiceWeb;
import com.w7vm.menuweb.entity.RestauranteFilialWeb;
import com.w7vm.menuweb.entity.RestauranteSedeWeb;
import com.w7vm.menuweb.facade.AlimentoFacade;
import com.w7vm.menuweb.facade.CardapioG1Facade;
import com.w7vm.menuweb.facade.CardapioG2Facade;
import com.w7vm.menuweb.facade.CardapioG3Facade;
import com.w7vm.menuweb.facade.RestauranteFilialFacade;
import com.w7vm.menuweb.facade.RestauranteSedeFacade;
import com.w7vm.menuweb.message.MessageFaces;
import com.w7vm.menuweb.service.AlimentosService;
import com.w7vm.menuweb.service.CardapioService;
import com.w7vm.menuweb.utility.Constantes;
import com.w7vm.menuweb.utility.ConstantesEJB;
import com.w7vm.menuweb.utility.DataUtils;
import com.w7vm.menuweb.utility.FacesUtil;
import com.w7vm.menuweb.utility.PropertiesLoaderImpl;
import com.w7vm.menuweb.vo.AlimentoVO;
import com.w7vm.menuweb.vo.CardapioVO;

@ManagedBean
@ViewScoped
//@RequestScoped
public class CardapiosAlteracaoMB implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@EJB
	private CardapioG1Facade cardapioG1EJB;

	@EJB
	private CardapioG2Facade cardapioG2EJB;

	@EJB
	private CardapioG3Facade cardapioG3EJB;

	
	@EJB
	private RestauranteSedeFacade sedeEJB;
	RestauranteSedeWeb restSede = new RestauranteSedeWeb();

	@EJB
	private RestauranteFilialFacade filialEJB;
	RestauranteFilialWeb restFilial = new RestauranteFilialWeb();
	
	@EJB
	private AlimentoFacade alimentoEJB;
	
	private MessageFaces message = new MessageFaces();
	
	Constantes constObj = new Constantes();
	private CardapioVO cardapioVO = new CardapioVO();
	private LoginMB loginOjb = new LoginMB();

	// G2
	private CardapioLaCarteWeb laCarteEntity = null;
	private CardapioInfantilWeb infantilEntity = null;

	// G1
	private CardapioBuffetWeb buffetEntity = null;
	private CardapioSelfServiceWeb selfserviceEntity = null;

	private List<SelectItem> cardapios;
	private List<String> diasSemana;

	private List<AlimentoVO> alimentoTipoL = null;
	private List<AlimentosTiposSy> alimentosGeraisL = null;
	private List<AlimentoVO> alimentoL = null;
	private List<AlimentoVO> alimentoEntityAltL;
	private List<AlimentoVO> alimentoEntityTable;
	private List<AlimentoVO> alimentoVOAltL;
	
	private List<AlimentoVO> compAlimentosAltL = null;

	private String selectedTipoAlimento;
	private List<AlimentoVO> selectedAlimentoL = new ArrayList<AlimentoVO>();
	private AlimentoVO alimentoVO = new AlimentoVO();
	private AlimentoVO alimentoSelAlt;
	
	// Variaveis Status : Layout Tela
	private boolean selectedBuffetSalada = true; 
	private boolean selectedSobremesa = true; 
	private boolean selectedAcompanhamento = true;
	private boolean selectedCortesia = true; 
	private boolean selectedBuffetQuente = true;
	private boolean selectedPanelCadastro = true;
	private boolean selectedPanelReportCad = false;
	private int statusAtivarCardapio = -1;
	private int statusDesativarCardapio = -1;
	private int statusAlterarCardapio = -1;
	private int statusAtivaInativaCardapio = -1;
	
	private int i = -1;
	
	// Variaveis : Layout Tela Nome
	private String tipoCardapio;
	private String nomeTelaCadastro;
	private String nomeTelaReport;
	private String nomeTelaCaracteristica;
	private String nomeTelaComposicao;
	private String nomeTelaAgendamento;
	private String nomeCardapio;
	private String mensagem;
	private String msgAtivacaoDesativacaoCardapio;
	private String msgTituloAtivacaoDesativacaoCardapio;

	private boolean statusSolicitacaoProxTela = false;
	private String statusDescricao;
	private int statusTipo;
	
	private Date dtAtual;
	private Date dtAtivacao;
	
	
	private Date dtExpContrato;
	private List<String> selectDiasSemana;
	private Boolean opcDataTermino = true;
	
	private List<String> nomeAliEspecialidadeL = new ArrayList<String>();
	private String nomeTipoAlimento;

	private String semanaDia;
	private boolean diaSegunda = false;
	private boolean diaTerca = false;
	private boolean diaQuarta = false;
	private boolean diaQuinta = false;
	private boolean diaSexta = false;
	private boolean diaSabado = false;
	private boolean diaDomingo = false;
	private String dia;
	private String diasSemanaTable;
	private String diaSelecionado;
	private boolean statusAltCompAlimentar = false;
	private boolean statusAltDiasSemana = false;
	private boolean statusEditar = true;
	private boolean statusBtnAlterar = false;
	
	// Variaveis : Layout Tela Visibilidade
	private boolean statusAltPratoFrio = true;
	private boolean statusAltPratoQuente = false;
	private boolean statusAltSobremesa = false;
	private boolean statusAltCortesia = false;
	private boolean statusTelaCaracteristica = false;
	private boolean statusValidacaoCampo = false;
	
	private String nomePratoFrioCardapio;
	private String nomePratoQuenteCardapio;
	private String nomeSobremesaCardapio;
	private String nomeCortesiaCardapio;


	public CardapiosAlteracaoMB() {
		System.out.println("CardapioG1UDMB()");
		
		 try {
		     Context ctx = new InitialContext();
		     cardapioG1EJB = (CardapioG1Facade) ctx.lookup("java:global/MenuWeb/MenuWeb-EJB/CardapioG1EJB");
		 } catch (NamingException e) {
		     throw new EJBException(e);
		 }
		 controllCardapio();
	}
	
	
// ======= METHOD REDIRECT -- ===========================


	// CardapioG1 : Buffet | SelfService
	public void redirecionaCardapioAltCardapio(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("../../../user/cardapio/cardapioG1/altCardapioG1.jsf");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// CardapioG1 : Buffet | SelfService
	public void redirecionaPortalHome(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("../../../user/portalCardapioMundo.jsf");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	// CardapioG1 : Buffet | SelfService
	public void redirecionaCardapioG1(){
		try {
			FacesContext.getCurrentInstance().getExternalContext().redirect("../../../user/cardapio/cardapioG1/cadCardapioG1.jsf");
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
// ======= METHOD LOAD -- Cardapio G1 | G2 | G3) ===========================


	public void controllCardapio(){
		System.out.println("controllCardapiosGrupo()");
		setStatusTelaCaracteristica(true);
		cardapioVO = (CardapioVO) FacesUtil.getApplicationMapValue("CardapiosMB.value");
		tipoCardapio = cardapioVO.getCategoriaCardapio();

		if (tipoCardapio.equals(constObj.CARDAPIO_BUFFET)){
			loadCardapioG1Buffet();
		}
		else if (tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
			loadCardapioG1SelfService();
		}
		else if (tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
			loadCardapioG2LaCarte();
		}
		else if (tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
			loadCardapioG2Infantil();
		}
	
	}
	
	
// ============= METHOD LOAD -- Cardapio (BUFFET | SELF.SERVICE) ===========================

		//Cardapio G1 :: Buffet 
		public void loadCardapioG1Buffet(){
			System.out.println("loadCardapioG1Buffet --> tipoCardapio  "+ tipoCardapio);

			nomeTelaCadastro = "Alteração Cardápio - Buffet";
			nomeTelaCaracteristica = "Característica Cardápio - Buffet";
			nomeTelaComposicao = "Composição Alimentar Cardápio - Buffet";
			nomeTelaAgendamento = "Agendamento Cardápio - Buffet";
			nomeCardapio = "CARDÁPIO BUFFET";
				
			nomePratoFrioCardapio = "Buffet Salada";
			nomePratoQuenteCardapio = "Buffet Quente";
			nomeSobremesaCardapio = "Buffet Sobremesa";
			nomeCortesiaCardapio = "Buffet Cortesia";			
				
			listaCardapioG1PorID();
			getAlimentoEntityAltL();
		}
		
		//Cardapio G2 :: LACARTE
		public void loadCardapioG1SelfService(){
			nomeTelaCadastro = "Alteração Cardápio - SelfService";
			nomeTelaCaracteristica = "Característica Cardápio - SelfService";
			nomeTelaComposicao = "Composição Alimentar Cardápio - SelfService";
			nomeTelaAgendamento = "Agendamento Cardápio - Buffet";
			nomeCardapio = "CARDÁPIO SELFSERVICE";
				
			nomePratoFrioCardapio = "SelfService Salada";
			nomePratoQuenteCardapio = "SelfService Quente";
			nomeSobremesaCardapio = "SelfService Sobremesa";
			nomeCortesiaCardapio = "SelfService Cortesia";			
				
			listaCardapioG1PorID();
			getAlimentoEntityAltL();
		}

		//Cardapio G2 :: LACARTE
		public void loadCardapioG2LaCarte(){
			System.out.println("loadCardapioG2LaCarte --> tipoCardapio  "+ tipoCardapio);

			nomeTelaCadastro = "Alteração Cardápio - LaCarte";
			nomeTelaCaracteristica = "Característica Cardápio - LaCarte";
			nomeTelaComposicao = "Composição Alimentar Cardápio - LaCarte";
			nomeTelaAgendamento = "Agendamento Cardápio - LaCarte";
			nomeCardapio = "CARDÁPIO LACARTE";
				
			nomePratoFrioCardapio = "LaCarte Entrada";
			nomePratoQuenteCardapio = "LaCarte Quente";
			nomeSobremesaCardapio = "LaCarte Sobremesa";
			nomeCortesiaCardapio = "LaCarte Cortesia";			
				
			listaCardapioG2PorID();
			getAlimentoEntityAltL();
		}
		
		//Cardapio G2 :: Instanfil
		public void loadCardapioG2Infantil(){
			System.out.println("loadCardapioG2Infantil --> tipoCardapio  "+ tipoCardapio);

			nomeTelaCadastro = "Alteração Cardápio - Infantil";
			nomeTelaCaracteristica = "Característica Cardápio - Infantil";
			nomeTelaComposicao = "Composição Alimentar Cardápio - Infantil";
			nomeTelaAgendamento = "Agendamento Cardápio - Infantil";
			nomeCardapio = "CARDÁPIO INFANTIL";
				
			nomePratoFrioCardapio = "Infantil Entrada";
			nomePratoQuenteCardapio = "Infantil Quente";
			nomeSobremesaCardapio = "Infantil Sobremesa";
			nomeCortesiaCardapio = "Infantil Cortesia";			
				
			listaCardapioG2PorID();
			getAlimentoEntityAltL();
		}
	
// ============= METHOD FIND CARDAPIOS G1 | G2 | G3 BY ID  ===========================
	
	// CARDAPIO G1 (BUffet | SelfService)
	public CardapioVO listaCardapioG1PorID(){
		System.out.println("[method][listaCardapioG1PorID()].......");
		AlimentosService alimentoService = new AlimentosService();

		if (tipoCardapio.equals(constObj.CARDAPIO_BUFFET)){
			if(buffetEntity == null){
				System.out.println("listaCardapioG1PorID() - Cardapio Buffet......."+ cardapioVO.getIdCardapioBuffetWeb());
				buffetEntity = cardapioG1EJB.findBuffetByID(cardapioVO.getIdCardapioBuffetWeb());
				cardapioVO = cardapioG1EJB.setCardapioBuffetVO(buffetEntity);
				alimentoEntityAltL = alimentoService.convertComposicaoBuffetEntityToAlimentoVO(buffetEntity.getComposicaoCardBuffetWebs());
				alimentoEntityTable = alimentoEntityAltL; 
				diasSemanaTable = cardapioVO.getDiasSemana();
				dtAtivacao = cardapioVO.getDtInicio(); 
			}
		}
		else if (tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
			if(selfserviceEntity == null){
				System.out.println("listaCardapioG1PorID() - Cardapio SelfService......."+ cardapioVO.getIdCardapioSelfServiceWeb());
				selfserviceEntity = cardapioG1EJB.findSelfServiceByID(cardapioVO.getIdCardapioSelfServiceWeb());
				cardapioVO = cardapioG1EJB.setCardapioSelfServiceVO(selfserviceEntity);
				alimentoEntityAltL = alimentoService.convertComposicaoSelfServiceEntityToAlimentoVO(selfserviceEntity.getComposicaoCardSelfServiceWebs());
				alimentoEntityTable = alimentoEntityAltL; 
				diasSemanaTable = cardapioVO.getDiasSemana();
				dtAtivacao = cardapioVO.getDtInicio(); 
			}
		}
		return cardapioVO; 
	}
	
	// CARDAPIO G2 (LaCarte | Infantil)
	public CardapioVO listaCardapioG2PorID(){
		System.out.println("[MEtho][listaCardapioG2PorID()].......");
		AlimentosService alimentoService = new AlimentosService();

		if (tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
			if(laCarteEntity == null){
				laCarteEntity = cardapioG2EJB.findLaCarteByID(cardapioVO.getIdCardapioLaCarteWeb());
				cardapioVO = cardapioG2EJB.setCardapioLaCarteVO(laCarteEntity);
				alimentoEntityAltL = alimentoService.convertComposicaoLaCarteEntityToAlimentoVO(laCarteEntity.getComposicaoCardLaCarteWebs());
				alimentoEntityTable = alimentoEntityAltL; 
				diasSemanaTable = cardapioVO.getDiasSemana();
				dtAtivacao = cardapioVO.getDtInicio(); 
			}
		}
		else if (tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
			if(selfserviceEntity == null){
				infantilEntity = cardapioG2EJB.findInfantilByID(cardapioVO.getIdCardapioInfantilWeb());
				cardapioVO = cardapioG2EJB.setCardapioInfantilVO(infantilEntity);
				alimentoEntityAltL = alimentoService.convertComposicaoInfantilEntityToAlimentoVO(infantilEntity.getComposicaoCardInfantilWebs());
				alimentoEntityTable = alimentoEntityAltL; 
				diasSemanaTable = cardapioVO.getDiasSemana();
				dtAtivacao = cardapioVO.getDtInicio(); 
			}
		}
		return cardapioVO; 
	}

	
	
// ======= METHOD LOAD -- Cardapio (Buffet / LaCarte / Infantil / SelfService / Especialidade) ===========================

	public List<AlimentoVO> loadTipoAlimentos(){
		System.out.println("loadTipoAlimentos ================================================= ");
		AlimentosService alimentoService = new AlimentosService();

		alimentosGeraisL = alimentoEJB.getFindAlimentosTiposByAll();
		
		System.out.println("loadTipoAlimentos getFindAlimentosTiposByAll  "+ alimentosGeraisL.size());
		if(alimentosGeraisL != null)
		{
			alimentoTipoL = alimentoService.convertListaAlimentoTipo(alimentosGeraisL);
		}
		System.out.println("loadTipoAlimentos ================================================  "+ alimentoTipoL.size());
		return alimentoTipoL;
	}
	
	public List<AlimentoVO> loadAlimentosComposicao(List<AlimentosTiposSy> alimentosGeraisL, String tipoAlimento){
		System.out.println("BEGIN loadAlimentosComposicao ================================================= ");
		
		AlimentosService alimentoService = new AlimentosService();
		alimentoL = alimentoService.convertListaAlimentoComposicao(alimentosGeraisL, tipoAlimento);
		System.out.println("END loadAlimentosComposicao ================================================  "+ alimentoL.size());
		return alimentoL;
	}
	

// ======================== VISUALIZA CAMPOS PARA ALTERAÇÃO =========================================


	public void visibleDescricaoSaladaAlt(){
		System.out.println("visibleDescricaoSaladaAlt()");
		setStatusEditar(false);
	}
	
	public void visibleDescricaoQuenteAlt(){
		System.out.println("visibleDescricaoQuenteAlt()");
		statusAltPratoQuente = true;
		statusAltPratoFrio = false;
		statusAltSobremesa = false;
		statusAltCortesia = false;
	}
	
	public void visibleDescricaoSobremesaAlt(){
		System.out.println("visibleDescricaoSobremesaAlt()");
		statusAltSobremesa = true;
		statusAltPratoQuente = false;
		statusAltPratoFrio = false;
		statusAltCortesia = false;
	}
	
	public void visibleDescricaoAcompanhamentoAlt(){
		System.out.println("visibleDescricaoAcompanhamentoAlt()");
		statusAltCortesia = true;
		statusAltSobremesa = false;
		statusAltPratoQuente = false;
		statusAltPratoFrio = false;
	}

// ======= VALIDA CAMPOS --  ===========================

	public boolean validaAgendamentoCardapio(){
		System.out.println("validaAgendamentoCardapio() ");
		boolean retorno = false;
		DataUtils dateCheck = new DataUtils();
		String dataNowS;
		
		if(selectDiasSemana.size() == 0){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgDiasSemana");
			message.sendErrorMessageToUser(msgTitulo, "agendamentoDias");
			retorno = true;
			return retorno; 
		}

		if(cardapioVO.getDtInicio() == null){
			String msgTitulo = PropertiesLoaderImpl.getValor("dtInicioAgendamento");
			System.out.println("validaAgendamentoCardapio  "+ msgTitulo);
			message.sendErrorMessageToUser(msgTitulo, "agendamentoDias");
			retorno = true;
			return retorno; 
		}
		else{
			SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy");
			dataNowS = DATE_FORMAT.format(cardapioVO.getDtInicio());
			

			System.out.println("VALIDA DATA"+ dateCheck.validaData(dataNowS));

			System.out.println("VALIDA DATA"+ dateCheck.validaData(dataNowS));
			
			if(dateCheck.validaData(dataNowS) == false){
				String msgTitulo = PropertiesLoaderImpl.getValor("dtInicioCardapioInvalida");
				System.out.println("dtInvalida  "+ msgTitulo);
				message.sendErrorMessageToUser(msgTitulo, "agendamentoDias");
				retorno = true;
				return retorno; 
			}
		}

		if(cardapioVO.getDtTermino() != null){
			SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy");
			dataNowS = DATE_FORMAT.format(cardapioVO.getDtTermino());

			if(cardapioVO.getDtTermino().before(cardapioVO.getDtInicio())){
				String msgTitulo = PropertiesLoaderImpl.getValor("dtFimRegraAtiva");
				System.out.println("validaAgendamentoCardapio  "+ msgTitulo);
				message.sendErrorMessageToUser(msgTitulo, "agendamentoDias");
				retorno = true;
				return retorno; 
			}
			if(dateCheck.validaData(dataNowS) == false){
				String msgTitulo = PropertiesLoaderImpl.getValor("dtFimCardapioInvalida");
				System.out.println("dtInvalida  "+ msgTitulo);
				message.sendErrorMessageToUser(msgTitulo, "agendamentoDias");
				retorno = true;
				return retorno; 
			}
		}
		return retorno;
	}


//// ======= METHOD ALTERAR -- Status Cardápio (Ativo -> Inativo / Inativo -> Ativo / Cadastro -> Ativo/Inativo ===========================
	
	
	public void editarCampos(){
		System.out.println("editarCampos()");
		
		if(cardapioVO.getStatus() == constObj.INATIVOs){
			String msgTitulo = PropertiesLoaderImpl.getValor("editCardapioInativo");
			message.sendInfoMessageToUser(msgTitulo, "");
		}
		else{
			setStatusEditar(false);
			setStatusBtnAlterar(true);
		}
	}
	
	public void setValoresAtivaCardapio(){
		System.out.println("setValoresAtivaCardapio()");
		cardapioVO.setDtInicio(null);
		cardapioVO.setDtTermino(null);
		selectDiasSemana = null; 
	}
	
	public void alterarStatusCardapioAtivar(){
		System.out.println("[Method][alterarStatusCardapioAtivar()]");
		
		if(validaAgendamentoCardapio() == false){
			statusCardapioAtivaInativa();
		}
		
	}
		
	
	public void statusCardapioAtivaInativa(){
		System.out.println("ativarCardapio()");
		String msgTitulo;
		String dtTermino;

			if(statusAtivaInativaCardapio == constObj.ATIVO){
				
				System.out.println("UPDATE statusAtivaInativaCardapio.............................."+ statusAtivaInativaCardapio);
		
				if(selectDiasSemana != null){
					String dias = preparaDiasSemana();
					cardapioVO.setDiasSemana(dias);
				}
					
				if (cardapioVO.getDtTermino() == null){
					dtTermino = (String) loginOjb.getSessao("DtTerminoContrato");
					DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
					try {
						Date date = (Date)formatter.parse(dtTermino);
						System.out.println("Data Termino....."+ date );
						cardapioVO.setDtTermino(date);
					} catch (ParseException e) {
							e.printStackTrace();
					}
				}
				
				Date nowData = new Date();
				SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
				String dateToday = DATE_FORMAT.format(nowData);
				String dateCard = DATE_FORMAT.format(cardapioVO.getDtInicio());

				if(dateToday.equals(dateCard)){
					if (tipoCardapio.equals(constObj.CARDAPIO_BUFFET)){
						buffetEntity = cardapioG1EJB.setCardapioBuffetEntity(cardapioVO);
						buffetEntity.setStatus(constObj.ATIVO);
						buffetEntity.setIdCardapioBuffetWeb(cardapioVO.getIdCardapioBuffetWeb());
					}
					else if (tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
						selfserviceEntity = cardapioG1EJB.setCardapioSelfServiceEntity(cardapioVO);
						selfserviceEntity.setStatus(constObj.ATIVO);
						selfserviceEntity.setIdCardapioSelfServiceWeb(cardapioVO.getIdCardapioSelfServiceWeb());
					}
					else if (tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
						laCarteEntity = cardapioG2EJB.setCardapioLaCarteEntity(cardapioVO);
						laCarteEntity.setStatus(constObj.ATIVO);
						laCarteEntity.setIdCardapioLaCarteWeb(cardapioVO.getIdCardapioLaCarteWeb());
					}
					else if (tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
						infantilEntity = cardapioG2EJB.setCardapioInfantilEntity(cardapioVO);
						infantilEntity.setStatus(constObj.ATIVO);
						infantilEntity.setIdCardapioInfantilWeb(cardapioVO.getIdCardapioInfantilWeb());
					}
				}
				else{
					if (tipoCardapio.equals(constObj.CARDAPIO_BUFFET)){
						buffetEntity.setStatus(constObj.AGENDADO_ATIVACAO);
						statusAtivaInativaCardapio = constObj.AGENDADO_ATIVACAO;
						buffetEntity.setIdCardapioBuffetWeb(cardapioVO.getIdCardapioBuffetWeb());
					}
					else if (tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
						selfserviceEntity.setStatus(constObj.AGENDADO_ATIVACAO);
						statusAtivaInativaCardapio = constObj.AGENDADO_ATIVACAO;
						selfserviceEntity.setIdCardapioSelfServiceWeb(cardapioVO.getIdCardapioSelfServiceWeb());
					}
					else if (tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
						laCarteEntity.setStatus(constObj.AGENDADO_ATIVACAO);
						statusAtivaInativaCardapio = constObj.AGENDADO_ATIVACAO;
						laCarteEntity.setIdCardapioLaCarteWeb(cardapioVO.getIdCardapioLaCarteWeb());
					}
					else if (tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
						infantilEntity.setStatus(constObj.AGENDADO_ATIVACAO);
						statusAtivaInativaCardapio = constObj.AGENDADO_ATIVACAO;
						infantilEntity.setIdCardapioInfantilWeb(cardapioVO.getIdCardapioInfantilWeb());
					}
				}
			}
			else if(statusAtivaInativaCardapio == constObj.INATIVO){
				if (tipoCardapio.equals(constObj.CARDAPIO_BUFFET)){
					buffetEntity.setStatus(constObj.INATIVO);
					buffetEntity.setIdCardapioBuffetWeb(cardapioVO.getIdCardapioBuffetWeb());
				}
				else if (tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
					selfserviceEntity.setStatus(constObj.INATIVO);
					selfserviceEntity.setIdCardapioSelfServiceWeb(cardapioVO.getIdCardapioSelfServiceWeb());
				}
				else if (tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
					laCarteEntity.setStatus(constObj.INATIVO);
					laCarteEntity.setIdCardapioLaCarteWeb(cardapioVO.getIdCardapioLaCarteWeb());
				}
				else if (tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
					infantilEntity.setStatus(constObj.INATIVO);
					infantilEntity.setIdCardapioInfantilWeb(cardapioVO.getIdCardapioInfantilWeb());
				}
			}
			
			try{

				if (tipoCardapio.equals(constObj.CARDAPIO_BUFFET)){
					cardapioG1EJB.updateStatusCardapioBuffet(buffetEntity);
				}
				else if (tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
					cardapioG1EJB.updateStatusCardapioSelfService(selfserviceEntity);
				}
				else if (tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
					cardapioG2EJB.updateStatusCardapioLaCarte(laCarteEntity);
				}
				else if (tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
					cardapioG2EJB.updateStatusCardapioInfantil(infantilEntity);
				}


				diasSemana = null;
				if(statusAtivaInativaCardapio == constObj.ATIVO){
					cardapioVO.setStatus(constObj.ATIVOs);
					RequestContext context = RequestContext.getCurrentInstance();
					context.execute("PF('dlgMsgAtivacao').hide();"); 
					context.execute("PF('dlgMsgAtivacaoInativacao').hide();");
					context.execute("PF('dlgAtivarCardapio').hide();");
					msgTitulo = PropertiesLoaderImpl.getValor("msgConfirmaAtivacaoCardapio");
					message.sendInfoMessageToUser(msgTitulo, "");
				}
				else if(statusAtivaInativaCardapio == constObj.INATIVO){
					cardapioVO.setStatus(constObj.INATIVOs);
					msgTitulo = PropertiesLoaderImpl.getValor("msgConfirmaInativacaoCardapio");
					message.sendInfoMessageToUser(msgTitulo, "");
				}
				else if(statusAtivaInativaCardapio == constObj.AGENDADO_ATIVACAO){
					cardapioVO.setStatus(constObj.AGENDADO_ATIVACAOs);
					RequestContext context = RequestContext.getCurrentInstance();
					context.execute("PF('dlgMsgAtivacao').hide();");
					context.execute("PF('dlgMsgAtivacaoInativacao').hide();");
					context.execute("PF('dlgAtivarCardapio').hide();");
					msgTitulo = PropertiesLoaderImpl.getValor("msgConfirmacaoAtivacaoInativacaoCardapio");
					message.sendInfoMessageToUser(msgTitulo, "");
				}
				
			} catch (Exception e) {
				e.printStackTrace();
				
				if(statusAtivaInativaCardapio == constObj.ATIVO){
					cardapioVO.setStatus(constObj.ATIVOs);
					msgTitulo = PropertiesLoaderImpl.getValor("msgErroAtivacaoCardapio");
					message.sendErrorMessageToUser(msgTitulo, "");
				}
				else if(statusAtivaInativaCardapio == constObj.INATIVO){
					cardapioVO.setStatus(constObj.INATIVOs);
					msgTitulo = PropertiesLoaderImpl.getValor("msgErroInativacaoCardapio");
					message.sendErrorMessageToUser(msgTitulo, "");
				}
			}
 	}
	
// ======= METHOD PERSIST -- Cardapio (Buffet / LaCarte / Infantil / SelfService / Especialidade) ===========================
	
	
	public void salvarCardapio(){
		System.out.println("salvarCardapio()....."+ tipoCardapio);
		
		if(tipoCardapio.equals(constObj.CARDAPIO_BUFFET) ||
				tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
			cardapioVO.setDtInicio(dtAtivacao);
			salvarCardapioG1();
		} else if(tipoCardapio.equals(constObj.CARDAPIO_LACARTE) ||
				tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
			cardapioVO.setDtInicio(dtAtivacao);
			salvarCardapioG2();
		} 
	}
	
	public void salvarCardapioG1(){
		System.out.println("[METHOD][SalvarCardapioG1()] "+ tipoCardapio);
		DataUtils dateUtils = new DataUtils();
		selfserviceEntity = new CardapioSelfServiceWeb();
		buffetEntity = new CardapioBuffetWeb();
		RestauranteSedeWeb restSedeObj = new RestauranteSedeWeb();
		RestauranteFilialWeb restFilialObj = new RestauranteFilialWeb();
		AlimentosService alimentoService = new AlimentosService();
		List<ComposicaoCardSelfServiceWeb> compCardSelfServiceAlimentoL = null;
		List<ComposicaoCardBuffetWeb> compCardBuffetAlimentoL = null;
		int idRestauranteFilial = 0;
		int idRestauranteSede = 0;
		String dtTermino;
		
		//Alteração agendamento cardapio
		if(statusAltDiasSemana == true){
			String dias = preparaDiasSemana();
			cardapioVO.setDiasSemana(dias);
			System.out.println("DIAS SEMANA ALT.........."+ cardapioVO.getDiasSemana());
		}
		//Não ocorreu alteração no agendamento do cardapio
		else if(statusAltDiasSemana == false){
			cardapioVO.setDiasSemana(diasSemanaTable);
			System.out.println("DIAS SEMANA NÃO ALT .........."+ cardapioVO.getDiasSemana());
		}
 
		
		if (cardapioVO.getDtTermino() == null){
			dtTermino = (String) loginOjb.getSessao("DtTerminoContrato");
			DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
			try {
				Date date = (Date)formatter.parse(dtTermino);
				System.out.println("Data Termino....."+ date );
				cardapioVO.setDtTermino(date);
			} catch (ParseException e) {
				e.printStackTrace();
			}  
		}
		
		
		if(tipoCardapio.equals(constObj.CARDAPIO_BUFFET)){
			try{
				cardapioG1EJB.deleteBuffet(cardapioVO.getIdCardapioBuffetWeb());
				buffetEntity = cardapioG1EJB.setCardapioBuffetEntity(cardapioVO);

				// Ocorreu alteração Composição alimentar do cardápio
				if(statusAltCompAlimentar == true){
					compCardBuffetAlimentoL = alimentoService.convertListaAlimentoEntityBuffet(getAlimentoEntityAltL(), buffetEntity);
					cardapioVO.setComposicaoCardBuffetL(compCardBuffetAlimentoL);
				}
				// Não ocorreu alteração Composição alimentar do cardápio
				else if(statusAltCompAlimentar == false){
					compCardBuffetAlimentoL = alimentoService.convertListaAlimentoEntityBuffet(alimentoEntityTable, buffetEntity);
					cardapioVO.setComposicaoCardBuffetL(compCardBuffetAlimentoL);
				}
				// Set Entity Restaurante SEDE | FILIAL | ComposicaoCardapio
				buffetEntity.setComposicaoCardBuffetWebs(compCardBuffetAlimentoL);
				
				if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_SIM)){
					idRestauranteFilial = (Integer) loginOjb.getSessao("IDRestaurante");
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);			
					restFilialObj.setIdRestauranteFilialWeb(idRestauranteFilial);

					buffetEntity.setRestauranteFilialWeb(restFilialObj);
					buffetEntity.setRestauranteSedeWeb(restSedeObj);
				}
				else if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_NAO)){
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);		
					buffetEntity.setRestauranteSedeWeb(restSedeObj);
				}
				cardapioG1EJB.saveBuffet(buffetEntity);


			}  catch (Exception e) {
				e.printStackTrace();
				String msgTitulo = PropertiesLoaderImpl.getValor("tErrorCadCardapioBuffet");
				message.sendErrorMessageToUser(msgTitulo, "");
			}

		} else if(tipoCardapio.equals(constObj.CARDAPIO_SELFSERVICE)){
			try{
				cardapioG1EJB.deleteSelfService(cardapioVO.getIdCardapioSelfServiceWeb());
				selfserviceEntity = cardapioG1EJB.setCardapioSelfServiceEntity(cardapioVO);

				// Ocorreu alteração Composição alimentar do cardápio
				if(statusAltCompAlimentar == true){
					compCardSelfServiceAlimentoL = alimentoService.convertListaAlimentoEntitySelfService(getAlimentoEntityAltL(), selfserviceEntity);
					cardapioVO.setComposicaoCardSelfServiceL(compCardSelfServiceAlimentoL);
				}
				// Não ocorreu alteração Composição alimentar do cardápio
				else if(statusAltCompAlimentar == false){
					compCardSelfServiceAlimentoL = alimentoService.convertListaAlimentoEntitySelfService(alimentoEntityTable, selfserviceEntity);
					cardapioVO.setComposicaoCardSelfServiceL(compCardSelfServiceAlimentoL);
				}
				// Set Entity Restaurante SEDE | FILIAL | ComposicaoCardapio
				selfserviceEntity.setComposicaoCardSelfServiceWebs(compCardSelfServiceAlimentoL);
				
				if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_SIM)){
					idRestauranteFilial = (Integer) loginOjb.getSessao("IDRestaurante");
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);			
					restFilialObj.setIdRestauranteFilialWeb(idRestauranteFilial);

					selfserviceEntity.setRestauranteFilialWeb(restFilialObj);
					selfserviceEntity.setRestauranteSedeWeb(restSedeObj);
				}
				else if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_NAO)){
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);		
					selfserviceEntity.setRestauranteSedeWeb(restSedeObj);
				}
				
				cardapioG1EJB.saveSelfService(selfserviceEntity);

			}  catch (Exception e) {
				e.printStackTrace();
				String msgTitulo = PropertiesLoaderImpl.getValor("tErrorCadCardapioSelfService");
				message.sendErrorMessageToUser(msgTitulo, "");
			}
		}
		
		setStatusEditar(true);
		setStatusBtnAlterar(false);
			
		Date nowData = new Date();
		SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
		String dateToday = DATE_FORMAT.format(nowData);
		String dateCard = DATE_FORMAT.format(cardapioVO.getDtInicio());
			
		if(dateToday.equals(dateCard)){
			String msgTituloI = PropertiesLoaderImpl.getValor("msgAlteracaoCardapioAlteraStatusAtivado");
			String msgTituloII = msgTituloI + " " + dateToday; 
			message.sendInfoMessageToUser(msgTituloII, "");
		}
		else{
			String msgTitulo = PropertiesLoaderImpl.getValor("msgAlteracaoCardapio");
			message.sendInfoMessageToUser(msgTitulo, "");
		}
 	}
	
	public void salvarCardapioG2(){
		System.out.println("[METHOD][SalvarCardapioG2()] "+ tipoCardapio);
		DataUtils dateUtils = new DataUtils();
		laCarteEntity = new CardapioLaCarteWeb();
		infantilEntity = new CardapioInfantilWeb();
		RestauranteSedeWeb restSedeObj = new RestauranteSedeWeb();
		RestauranteFilialWeb restFilialObj = new RestauranteFilialWeb();
		AlimentosService alimentoService = new AlimentosService();
		List<ComposicaoCardLaCarteWeb> compCardLaCarteAlimentoL = null;
		List<ComposicaoCardInfantilWeb> compCardInfantilAlimentoL = null;
		int idRestauranteFilial = 0;
		int idRestauranteSede = 0;
		String dtTermino;
		
		//Alteração agendamento cardapio
		if(statusAltDiasSemana == true){
			String dias = preparaDiasSemana();
			cardapioVO.setDiasSemana(dias);
		}
		//Não ocorreu alteração no agendamento do cardapio
		else if(statusAltDiasSemana == false){
			cardapioVO.setDiasSemana(diasSemanaTable);
		}
 
		
		if (cardapioVO.getDtTermino() == null){
			dtTermino = (String) loginOjb.getSessao("DtTerminoContrato");
			DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
			try {
				Date date = (Date)formatter.parse(dtTermino);
				System.out.println("Data Termino....."+ date );
				cardapioVO.setDtTermino(date);
			} catch (ParseException e) {
				e.printStackTrace();
			}  
		}
		
		
		if(tipoCardapio.equals(constObj.CARDAPIO_LACARTE)){
			try{
				cardapioG2EJB.deleteLaCarte(cardapioVO.getIdCardapioLaCarteWeb());
				laCarteEntity = cardapioG2EJB.setCardapioLaCarteEntity(cardapioVO);

				// Ocorreu alteração Composição alimentar do cardápio
				if(statusAltCompAlimentar == true){
					compCardLaCarteAlimentoL = alimentoService.convertListaAlimentoEntityLaCarte(getAlimentoEntityAltL(), laCarteEntity);
					cardapioVO.setComposicaoCardLaCarteL(compCardLaCarteAlimentoL);
				}
				// Não ocorreu alteração Composição alimentar do cardápio
				else if(statusAltCompAlimentar == false){
					compCardLaCarteAlimentoL = alimentoService.convertListaAlimentoEntityLaCarte(alimentoEntityTable, laCarteEntity);
					cardapioVO.setComposicaoCardLaCarteL(compCardLaCarteAlimentoL);
				}
				// Set Entity Restaurante SEDE | FILIAL | ComposicaoCardapio
				laCarteEntity.setComposicaoCardLaCarteWebs(compCardLaCarteAlimentoL);
				
				if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_SIM)){
					idRestauranteFilial = (Integer) loginOjb.getSessao("IDRestaurante");
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);			
					restFilialObj.setIdRestauranteFilialWeb(idRestauranteFilial);

					laCarteEntity.setRestauranteFilialWeb(restFilialObj);
					laCarteEntity.setRestauranteSedeWeb(restSedeObj);
				}
				else if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_NAO)){
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);		
					laCarteEntity.setRestauranteSedeWeb(restSedeObj);
				}
				cardapioG2EJB.saveLaCarte(laCarteEntity);

			}  catch (Exception e) {
				e.printStackTrace();
				String msgTitulo = PropertiesLoaderImpl.getValor("tErrorCadCardapioLaCarte");
				message.sendErrorMessageToUser(msgTitulo, "");
			}

		} else if(tipoCardapio.equals(constObj.CARDAPIO_INFANTIL)){
			try{
				cardapioG2EJB.deleteInfantil(cardapioVO.getIdCardapioInfantilWeb());
				infantilEntity = cardapioG2EJB.setCardapioInfantilEntity(cardapioVO);

				// Ocorreu alteração Composição alimentar do cardápio
				if(statusAltCompAlimentar == true){
					compCardInfantilAlimentoL = alimentoService.convertListaAlimentoEntityInfantil(getAlimentoEntityAltL(), infantilEntity);
					cardapioVO.setComposicaoCardInfantilL(compCardInfantilAlimentoL);
				}
				// Não ocorreu alteração Composição alimentar do cardápio
				else if(statusAltCompAlimentar == false){
					compCardInfantilAlimentoL = alimentoService.convertListaAlimentoEntityInfantil(alimentoEntityTable, infantilEntity);
					cardapioVO.setComposicaoCardInfantilL(compCardInfantilAlimentoL);
				}
				// Set Entity Restaurante SEDE | FILIAL | ComposicaoCardapio
				infantilEntity.setComposicaoCardInfantilWebs(compCardInfantilAlimentoL);
				
				if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_SIM)){
					idRestauranteFilial = (Integer) loginOjb.getSessao("IDRestaurante");
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);			
					restFilialObj.setIdRestauranteFilialWeb(idRestauranteFilial);

					infantilEntity.setRestauranteFilialWeb(restFilialObj);
					infantilEntity.setRestauranteSedeWeb(restSedeObj);
				}
				else if(loginOjb.getSessao("AcessoFilial").equals(constObj.ACESSO_FILIAL_NAO)){
					idRestauranteSede = (Integer) loginOjb.getSessao("IDSede");
					restSedeObj.setIdRestauranteSedeWeb(idRestauranteSede);		
					infantilEntity.setRestauranteSedeWeb(restSedeObj);
				}
				
				cardapioG2EJB.saveInfantil(infantilEntity);

			}  catch (Exception e) {
				e.printStackTrace();
				String msgTitulo = PropertiesLoaderImpl.getValor("tErrorCadCardapioInfantil");
				message.sendErrorMessageToUser(msgTitulo, "");
			}
		}
		
		setStatusEditar(true);
		setStatusBtnAlterar(false);
			
		Date nowData = new Date();
		SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
		String dateToday = DATE_FORMAT.format(nowData);
		String dateCard = DATE_FORMAT.format(cardapioVO.getDtInicio());
			
		if(dateToday.equals(dateCard)){
			String msgTituloI = PropertiesLoaderImpl.getValor("msgAlteracaoCardapioAlteraStatusAtivado");
			String msgTituloII = msgTituloI + " " + dateToday; 
			message.sendInfoMessageToUser(msgTituloII, "");
		}
		else{
			String msgTitulo = PropertiesLoaderImpl.getValor("msgAlteracaoCardapio");
			message.sendInfoMessageToUser(msgTitulo, "");
		}
 	}

	
	
	
// ========================================================================================================

	

	public String getTipoCardapio() {
		return tipoCardapio;
	}

	public void setTipoCardapio(String tipoCardapio) {
		this.tipoCardapio = tipoCardapio;
	}

	public CardapioVO getCardapioVO() {
		return cardapioVO;
	}

	public void setCardapioVO(CardapioVO cardapioVO) {
		this.cardapioVO = cardapioVO;
	}

	public RestauranteSedeWeb getRestSede() {
		return restSede;
	}

	public void setRestSede(RestauranteSedeWeb restSede) {
		this.restSede = restSede;
	}

	public RestauranteFilialWeb getRestFilial() {
		return restFilial;
	}

	public void setRestFilial(RestauranteFilialWeb restFilial) {
		this.restFilial = restFilial;
	}

	public List<SelectItem> getCardapios() {
		return cardapios;
	}

	public void setCardapios(List<SelectItem> cardapios) {
		this.cardapios = cardapios;
	}


	public List<AlimentoVO> getSelectedAlimentoL() {
		System.out.println("getSelectedAlimentoL........."+ selectedAlimentoL);

		return selectedAlimentoL;
	}
	
	public void setSelectedAlimentoL(List<AlimentoVO> selectedAlimentoL) {
		System.out.println("setSelectedAlimentoL ABC................"+ selectedAlimentoL.size());

		if(selectedAlimentoL.size() > 0){
			System.out.println("IF RESULT O.K "+ selectedAlimentoL);
			alimentoVOAltL = selectedAlimentoL;
		}
	}


	public List<AlimentoVO> getAlimentoTipoL() {
		System.out.println("BEGIN getAlimentoTipoL =====================================================");
		if(alimentoTipoL == null){
			alimentoTipoL = loadTipoAlimentos();
	
			for(AlimentoVO a : alimentoTipoL){
				nomeAliEspecialidadeL.add(a.getNomeTipo());
			}
		}
		return alimentoTipoL;
	}


	public void setAlimentoTipoL(List<AlimentoVO> alimentoTipoL) {
		this.alimentoTipoL = alimentoTipoL;
	}
	
	public List<AlimentoVO> getAlimentoL() {
		System.out.println("BEGIN getAlimentoL()");

		System.out.println("BEGIN nomeAliEspecialidadeL   "+ nomeAliEspecialidadeL.size());

		
		if(i == nomeAliEspecialidadeL.size() -1){
			i = nomeAliEspecialidadeL.size() -1;
		}
		else{
			i++;			
		}
		
		System.out.println("Numero do Alimento..........>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+ i);

		if(i <= nomeAliEspecialidadeL.size() -1){
			System.out.println("Numero do Alimento.........."+ i);
			String tipoAlimento = nomeAliEspecialidadeL.get(i);
			System.out.println("Nome do Alimento.........."+ tipoAlimento);
			
			alimentoL = loadAlimentosComposicao(alimentosGeraisL,tipoAlimento);
				
			System.out.println("END getAlimentoL().................."+ alimentoL.size());
			
			if(i == nomeAliEspecialidadeL.size() -1){
				i = -1;
			}

		}
		return alimentoL;
	}


	
	public void setAlimentoL(List<AlimentoVO> alimentoL) {
		this.alimentoL = alimentoL;
	}


	public String getSelectedTipoAlimento() {
		return selectedTipoAlimento;
	}


	public void setSelectedTipoAlimento(String selectedTipoAlimento) {
		this.selectedTipoAlimento = selectedTipoAlimento;
	}

	public Constantes getConstObj() {
		return constObj;
	}


	public void setConstObj(Constantes constObj) {
		this.constObj = constObj;
	}

	public String getNomeTelaCadastro() {
		return nomeTelaCadastro;
	}

	public void setNomeTelaCadastro(String nomeTelaCadastro) {
		this.nomeTelaCadastro = nomeTelaCadastro;
	}

	public String getNomeTelaCaracteristica() {
		return nomeTelaCaracteristica;
	}

	public void setNomeTelaCaracteristica(String nomeTelaCaracteristica) {
		this.nomeTelaCaracteristica = nomeTelaCaracteristica;
	}

	public String getNomeTelaComposicao() {
		return nomeTelaComposicao;
	}

	public void setNomeTelaComposicao(String nomeTelaComposicao) {
		this.nomeTelaComposicao = nomeTelaComposicao;
	}

	public String getNomeTelaAgendamento() {
		return nomeTelaAgendamento;
	}

	public void setNomeTelaAgendamento(String nomeTelaAgendamento) {
		this.nomeTelaAgendamento = nomeTelaAgendamento;
	}

	public boolean getSelectedBuffetSalada() {
		System.out.println("getSelectedBuffetSalada()"+ selectedBuffetSalada);
		return selectedBuffetSalada;
	}



	public void setSelectedBuffetSalada(boolean selectedBuffetSalada) {
		this.selectedBuffetSalada = selectedBuffetSalada;
	}



	public boolean getSelectedSobremesa() {
		return selectedSobremesa;
	}



	public void setSelectedSobremesa(boolean selectedSobremesa) {
		this.selectedSobremesa = selectedSobremesa;
	}



	public boolean getSelectedAcompanhamento() {
		return selectedAcompanhamento;
	}



	public void setSelectedAcompanhamento(boolean selectedAcompanhamento) {
		this.selectedAcompanhamento = selectedAcompanhamento;
	}



	public boolean getSelectedCortesia() {
		return selectedCortesia;
	}



	public void setSelectedCortesia(boolean selectedCortesia) {
		this.selectedCortesia = selectedCortesia;
	}



	public boolean isStatusTelaCaracteristica() {
		System.out.println("isStatusTelaCaracteristica()"+ statusTelaCaracteristica);
		return statusTelaCaracteristica;
	}



	public void setStatusTelaCaracteristica(boolean statusTelaCaracteristica) {
		this.statusTelaCaracteristica = statusTelaCaracteristica;
	}


	public boolean isStatusValidacaoCampo() {
		return statusValidacaoCampo;
	}


	public void setStatusValidacaoCampo(boolean statusValidacaoCampo) {
		this.statusValidacaoCampo = statusValidacaoCampo;
	}


	public AlimentoVO getAlimentoVO() {
		return alimentoVO;
	}


	public void setAlimentoVO(AlimentoVO alimentoVO) {
		this.alimentoVO = alimentoVO;
	}


	public List<String> getNomeAliEspecialidadeL() {
		return nomeAliEspecialidadeL;
	}


	public void setNomeAliEspecialidadeL(List<String> nomeAliEspecialidadeL) {
		this.nomeAliEspecialidadeL = nomeAliEspecialidadeL;
	}


	public String getNomeTipoAlimento() {
		return nomeTipoAlimento;
	}


	public void setNomeTipoAlimento(String nomeTipoAlimento) {
		this.nomeTipoAlimento = nomeTipoAlimento;
	}


	public String getMensagem() {
		return mensagem;
	}


	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}


	public boolean isStatusSolicitacaoProxTela() {
		return statusSolicitacaoProxTela;
	}


	public void setStatusSolicitacaoProxTela(boolean statusSolicitacaoProxTela) {
		System.out.println("setStatusSolicitacaoProxTela "+ statusSolicitacaoProxTela);
		this.statusSolicitacaoProxTela = statusSolicitacaoProxTela;
	}


	public RestauranteSedeFacade getSedeEJB() {
		return sedeEJB;
	}


	public void setSedeEJB(RestauranteSedeFacade sedeEJB) {
		this.sedeEJB = sedeEJB;
	}


	public RestauranteFilialFacade getFilialEJB() {
		return filialEJB;
	}


	public void setFilialEJB(RestauranteFilialFacade filialEJB) {
		this.filialEJB = filialEJB;
	}


	public AlimentoFacade getAlimentoEJB() {
		return alimentoEJB;
	}


	public void setAlimentoEJB(AlimentoFacade alimentoEJB) {
		this.alimentoEJB = alimentoEJB;
	}


	public MessageFaces getMsgObj() {
		return message;
	}


	public void setMsgObj(MessageFaces message) {
		this.message = message;
	}


	public LoginMB getLoginOjb() {
		return loginOjb;
	}


	public void setLoginOjb(LoginMB loginOjb) {
		this.loginOjb = loginOjb;
	}


	public CardapioLaCarteWeb getLaCarteEntity() {
		return laCarteEntity;
	}


	public void setLaCarteEntity(CardapioLaCarteWeb laCarteEntity) {
		this.laCarteEntity = laCarteEntity;
	}


	public CardapioInfantilWeb getInfantilEntity() {
		return infantilEntity;
	}


	public void setInfantilEntity(CardapioInfantilWeb infantilEntity) {
		this.infantilEntity = infantilEntity;
	}


	public List<AlimentosTiposSy> getAlimentosGeraisL() {
		return alimentosGeraisL;
	}


	public void setAlimentosGeraisL(List<AlimentosTiposSy> alimentosGeraisL) {
		this.alimentosGeraisL = alimentosGeraisL;
	}

	public Date getDtAtual() {
		dtAtual = new Date();
		return dtAtual;
	}


	public void setDtAtual(Date dtAtual) {
		this.dtAtual = dtAtual;
	}


	public Date getDtExpContrato() throws ParseException {
		DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
		String data = (String) loginOjb.getSessao("DtTerminoContrato");
		dtExpContrato = formatter.parse(data); 
		return dtExpContrato;
	}


	public void setDtExpContrato(Date dtExpContrato) {
		this.dtExpContrato = dtExpContrato;
	}


	public List<String> getSelectDiasSemana() {
		
		if(selectDiasSemana != null){
			for(String diaSemana : selectDiasSemana){
				if(diaSemana.equals(semanaDia)){
					dia =  diaSemana;
				}
			}
		}
		return selectDiasSemana;
	}


	public void setSelectDiasSemana(List<String> selectDiasSemana) {
		this.selectDiasSemana = selectDiasSemana;
	}


	public Boolean getOpcDataTermino() {
		System.out.println("OpcDataTermino  "+ opcDataTermino);
		return opcDataTermino;
	}


	public void setOpcDataTermino(Boolean opcDataTermino) {
		System.out.println("OpcDataTermino  "+ opcDataTermino);
		this.opcDataTermino = opcDataTermino;
	}


	public boolean isSelectedBuffetQuente() {
		return selectedBuffetQuente;
	}


	public void setSelectedBuffetQuente(boolean selectedBuffetQuente) {
		this.selectedBuffetQuente = selectedBuffetQuente;
	}


	public boolean isSelectedPanelCadastro() {
		System.out.println("setSelectedPanelCadastro "+  selectedPanelCadastro);
		return selectedPanelCadastro;
	}


	public void setSelectedPanelCadastro(boolean selectedPanelCadastro) {
		this.selectedPanelCadastro = selectedPanelCadastro;
	}


	public boolean isSelectedPanelReportCad() {
		return selectedPanelReportCad;
	}


	public void setSelectedPanelReportCad(boolean selectedPanelReportCad) {
		this.selectedPanelReportCad = selectedPanelReportCad;
	}

	public boolean getDiaSegunda() {
		semanaDia = constObj.DIA_SEGUNDA;
		getSelectDiasSemana();
		
		System.out.println("getDiaSegunda()"+ dia);
		if(dia != null){
			
			if(dia.equals(constObj.DIA_SEGUNDA)){
				diaSegunda = true;
				System.out.println("getDiaSegunda() IF 1 "+ diaSegunda );
			}
			else{
				diaSegunda = false;
				System.out.println("getDiaSegunda() ELSE 1 "+ diaSegunda );
			}
		}
		System.out.println("getDiaSegunda() result"+ diaSegunda );
		return diaSegunda;
	}


	public void setDiaSegunda(boolean diaSegunda) {
		this.diaSegunda = diaSegunda;
	}


	public boolean getDiaTerca() {
		semanaDia = constObj.DIA_TERCA;
		getSelectDiasSemana();

		if(dia != null){
		
			if(dia.equals(constObj.DIA_TERCA)){
				diaTerca = true;
			}
			else{
				diaTerca = false;
			}
		}
		return diaTerca;
	}


	public void setDiaTerca(boolean diaTerca) {
		this.diaTerca = diaTerca;
	}


	public boolean getDiaQuarta() {
		semanaDia = constObj.DIA_QUARTA;
		getSelectDiasSemana();
		
		if(dia != null){
			
			if(dia.equals(constObj.DIA_QUARTA)){
				diaQuarta = true;
			}
			else{
				diaQuarta = false;
			}
		}
		return diaQuarta;
	}


	public void setDiaQuarta(boolean diaQuarta) {
		this.diaQuarta = diaQuarta;
	}


	public boolean getDiaQuinta() {
		semanaDia = constObj.DIA_QUINTA;
		getSelectDiasSemana();

		if(dia != null){

			if(dia.equals(constObj.DIA_QUINTA)){
				diaQuinta = true;
			}
			else{
				diaQuinta = false;
			}
		}
		return diaQuinta;
	}


	public void setDiaQuinta(boolean diaQuinta) {
		this.diaQuinta = diaQuinta;
	}


	public boolean getDiaSexta() {
		semanaDia = constObj.DIA_SEXTA;
		getSelectDiasSemana();
		
		if(dia != null){
			if(dia.equals(constObj.DIA_SEXTA)){
				diaSexta = true; 
			}
			else{
				diaSexta = false;
			}
		}
		return diaSexta;
	}


	public void setDiaSexta(boolean diaSexta) {
		this.diaSexta = diaSexta;
	}


	public boolean getDiaSabado() {
		semanaDia = constObj.DIA_SABADO;
		getSelectDiasSemana();
		
		if(dia != null){
			if(dia.equals(constObj.DIA_SABADO)){
				diaSabado = true; 
			}
			else{
				diaSabado = false;
			}
		}
		return diaSabado;
	}


	public void setDiaSabado(boolean diaSabado) {
		this.diaSabado = diaSabado;
	}


	public boolean getDiaDomingo() {
		semanaDia = constObj.DIA_DOMINGO;
		getSelectDiasSemana();
		if(dia != null){

			if(dia.equals(constObj.DIA_DOMINGO)){
				diaDomingo = true; 
			}
			else{
				diaDomingo = false;
			}
		}
		return diaDomingo;
	}


	public void setDiaDomingo(boolean diaDomingo) {
		this.diaDomingo = diaDomingo;
	}


	public String getDia() {
		return dia;
	}


	public void setDia(String dia) {
		this.dia = dia;
	}


	public String isSemanaDia() {
		return semanaDia;
	}


	public void setSemanaDia(String semanaDia) {
		this.semanaDia = semanaDia;
	}


	public CardapioBuffetWeb getBuffetEntity() {
		return buffetEntity;
	}


	public void setBuffetEntity(CardapioBuffetWeb buffetEntity) {
		this.buffetEntity = buffetEntity;
	}


	public CardapioSelfServiceWeb getSelfserviceEntity() {
		return selfserviceEntity;
	}


	public void setSelfserviceEntity(CardapioSelfServiceWeb selfserviceEntity) {
		this.selfserviceEntity = selfserviceEntity;
	}


	public String getNomeTelaReport() {
		return nomeTelaReport;
	}


	public void setNomeTelaReport(String nomeTelaReport) {
		this.nomeTelaReport = nomeTelaReport;
	}


	public String getNomeCardapio() {
		return nomeCardapio;
	}


	public void setNomeCardapio(String nomeCardapio) {
		this.nomeCardapio = nomeCardapio;
	}

//*************************************************************************************************************
// MÉTODO :: ALTERAÇÃO - COMPOSIÇÃO DE ALIMENTOS
//*************************************************************************************************************
	
	public String preparaDiasSemana(){
		String dias = null;
		
		for(String dia : selectDiasSemana){
			if(dias == null){
				dias = dia;
			}
			else{
				dias = dias + "|"+ dia;
			}
		}
		return dias;
	}

	public void excluirAlimento(){
		System.out.println("[METHOD][excluirAlimento] "+ alimentoEntityAltL.size());
		
		if(alimentoSelAlt == null){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaExclusao");
			message.sendErrorMessageToUser(msgTitulo, "");
		}
		else if(alimentoEntityAltL.size() == 1){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaAlimentosExcluir");
			message.sendErrorMessageToUser(msgTitulo, "");
		}
		else if(alimentoSelAlt != null){
			
			for(int i = 0; i < alimentoEntityAltL.size(); i++){
				AlimentoVO a = alimentoEntityAltL.get(i);
				
				if(a.getDescricao().equals(alimentoSelAlt.getDescricao())){
					System.out.println("[METHOD]-[excluirAlimento]......................."+ a.getDescricao());
					alimentoEntityAltL.remove(i);
					statusAltCompAlimentar = true;					
					System.out.println("[METHOD]-[excluirAlimento] TAMANHO......................."+ alimentoEntityAltL.size());
					setSelectedAlimentoL(alimentoEntityAltL);
					break;
				}
			}
			
		}
	}
	
	public void excluirDias(){
		System.out.println("[METHOD][excluirDias()]"+ diasSemana.size());
		
		if(diaSelecionado == null){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaExclusao");
			message.sendErrorMessageToUser(msgTitulo, "");
		}
		else if(diasSemana.size() == 1){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaDiasSemanaExcluir");
			message.sendErrorMessageToUser(msgTitulo, "");
		}
		else if(diaSelecionado != null){
			statusAltDiasSemana = true;
			diasSemana.remove(diaSelecionado);
			statusAltDiasSemana = true;
			selectDiasSemana = diasSemana;
		}
	}
	
	public boolean adicionaDias(){
		System.out.println("[METHOD][adicionaDias()]");

		System.out.println("[METHOD][adicionaDias()] +++++++++++++++++++++++++++++++++++++++++++++++ "+ diaSelecionado );
		System.out.println("[METHOD][adicionaDias()] +++++++++++++++++++++++++++++++++++++++++++++++ "+ diasSemana );


		if(diaSelecionado != null && diaSelecionado != "" ){
			System.out.println("[METHOD][adicionaDias()] +++++++++++++++++++++++++++++++++++++++++++++++ "+ diaSelecionado );
			if(diasSemana != null){
				for(String d : diasSemana){
					if(d.equals(diaSelecionado)){
						String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaDiasSemana");
						message.sendErrorMessageToUser(msgTitulo, "addSemana");
						return true;
					}
				}
				diasSemana.add(diaSelecionado);
				System.out.println("TOTAL DIAS DA SEMANA............................."+ diasSemana);
				selectDiasSemana = diasSemana;
				RequestContext context = RequestContext.getCurrentInstance();
				context.execute("PF('dlgDiasSemana').hide();"); 
				statusAltDiasSemana = false;
			}
		}
		return false;
	}

	
	public boolean adicionaAlimentos(){
		System.out.println("[METHOD][adicionaAlimentos()] +++++++++++++++++++++++++++++++++++++++++++++++"+  alimentoVOAltL);
		
		if(alimentoVOAltL != null){
			for(AlimentoVO a : alimentoEntityAltL){
				for(AlimentoVO s : alimentoVOAltL){
					System.out.println("[METHOD][adicionaAlimentos()] +++++++++++++++++++++++++++++++++++++++++++++++"+ s.getDescricao());

					if(a.getDescricao().equals(s.getDescricao())){
						String alimento = PropertiesLoaderImpl.getValor("msgValidaAlimentos") + a.getDescricao(); 
						String msgTitulo = alimento;
						message.sendErrorMessageToUser(msgTitulo, "");
						return true;
					}
				}
			}
			setSelectedAlimentoL(alimentoVOAltL);
			alimentoEntityAltL.addAll(alimentoVOAltL);
			statusAltCompAlimentar = true;
		}
		else if(selectedAlimentoL == null){
			String msgTitulo = PropertiesLoaderImpl.getValor("msgValidaAddNull");
			message.sendErrorMessageToUser(msgTitulo, "");
			return true;
		}
		return false;
	}


	public List<AlimentoVO> getAlimentoEntityAltL() {
		System.out.println("getAlimentoEntityAltL()");
		return alimentoEntityAltL;
	}


	public void setAlimentoEntityAltL(List<AlimentoVO> alimentoEntityAltL) {
		this.alimentoEntityAltL = alimentoEntityAltL;
	}


	public CardapioG1Facade getCardapioG1EJB() {
		return cardapioG1EJB;
	}


	public void setCardapioG1EJB(CardapioG1Facade cardapioG1EJB) {
		this.cardapioG1EJB = cardapioG1EJB;
	}


	public List<AlimentoVO> getCompAlimentosAltL() {
		compAlimentosAltL = new ArrayList<AlimentoVO>();
		alimentoVO.setDescricao("TESTE 0 ");
		alimentoVO.setDescricao("TESTE 1 ");
		alimentoVO.setDescricao("TESTE 2 ");

		compAlimentosAltL.add(alimentoVO);
		return compAlimentosAltL;
	}


	public void setCompAlimentosAltL(List<AlimentoVO> compAlimentosAltL) {
		this.compAlimentosAltL = compAlimentosAltL;
	}


	public List<String> getDiasSemana() {
		
		if(diasSemana == null){
			AlimentosService alimentosObj = new AlimentosService();
			diasSemana = alimentosObj.parserDiasSemana(cardapioVO.getDiasSemana());
		}
		return diasSemana;
	}


	public void setDiasSemana(List<String> diasSemana) {
		this.diasSemana = diasSemana;
	}


	public String getDiaSelecionado() {
		return diaSelecionado;
	}


	public void setDiaSelecionado(String diaSelecionado) {
		System.out.println("[METHOD][SetDiaSelecionado()]....................................."+ diaSelecionado);
		this.diaSelecionado = diaSelecionado;
	}


	public AlimentoVO getAlimentoSelAlt() {
		return alimentoSelAlt;
	}


	public void setAlimentoSelAlt(AlimentoVO alimentoSelAlt) {
		this.alimentoSelAlt = alimentoSelAlt;
	}


	public List<AlimentoVO> getAlimentoVOAltL() {
		return alimentoVOAltL;
	}


	public void setAlimentoVOAltL(List<AlimentoVO> alimentoVOAltL) {
		this.alimentoVOAltL = alimentoVOAltL;
	}


	public String getStatusDescricao() {
		return statusDescricao;
	}


	public void setStatusDescricao(String statusDescricao) {
		this.statusDescricao = statusDescricao;
	}


	public int getStatusTipo() {
		return statusTipo;
	}


	public void setStatusTipo(int statusTipo) {
		this.statusTipo = statusTipo;
	}

	public boolean isStatusAltPratoFrio() {
		return statusAltPratoFrio;
	}


	public void setStatusAltPratoFrio(boolean statusAltPratoFrio) {
		this.statusAltPratoFrio = statusAltPratoFrio;
	}


	public boolean isStatusAltPratoQuente() {
		return statusAltPratoQuente;
	}


	public void setStatusAltPratoQuente(boolean statusAltPratoQuente) {
		this.statusAltPratoQuente = statusAltPratoQuente;
	}


	public boolean isStatusAltSobremesa() {
		return statusAltSobremesa;
	}


	public void setStatusAltSobremesa(boolean statusAltSobremesa) {
		this.statusAltSobremesa = statusAltSobremesa;
	}

	public String getNomePratoFrioCardapio() {
		return nomePratoFrioCardapio;
	}


	public void setNomePratoFrioCardapio(String nomePratoFrioCardapio) {
		this.nomePratoFrioCardapio = nomePratoFrioCardapio;
	}


	public String getNomePratoQuenteCardapio() {
		return nomePratoQuenteCardapio;
	}


	public void setNomePratoQuenteCardapio(String nomePratoQuenteCardapio) {
		this.nomePratoQuenteCardapio = nomePratoQuenteCardapio;
	}


	public String getNomeSobremesaCardapio() {
		return nomeSobremesaCardapio;
	}


	public void setNomeSobremesaCardapio(String nomeSobremesaCardapio) {
		this.nomeSobremesaCardapio = nomeSobremesaCardapio;
	}


	public boolean isStatusAltCortesia() {
		return statusAltCortesia;
	}


	public void setStatusAltCortesia(boolean statusAltCortesia) {
		this.statusAltCortesia = statusAltCortesia;
	}


	public String getNomeCortesiaCardapio() {
		return nomeCortesiaCardapio;
	}


	public void setNomeCortesiaCardapio(String nomeCortesiaCardapio) {
		this.nomeCortesiaCardapio = nomeCortesiaCardapio;
	}


	public String getMsgAtivacaoDesativacaoCardapio() {
		return msgAtivacaoDesativacaoCardapio;
	}


	public void setMsgAtivacaoDesativacaoCardapio(
			String msgAtivacaoDesativacaoCardapio) {
		this.msgAtivacaoDesativacaoCardapio = msgAtivacaoDesativacaoCardapio;
	}


	public String getMsgTituloAtivacaoDesativacaoCardapio() {
		return msgTituloAtivacaoDesativacaoCardapio;
	}


	public void setMsgTituloAtivacaoDesativacaoCardapio(
			String msgTituloAtivacaoDesativacaoCardapio) {
		this.msgTituloAtivacaoDesativacaoCardapio = msgTituloAtivacaoDesativacaoCardapio;
	}


	public int getStatusAlterarCardapio() {
		return statusAlterarCardapio;
	}


	public void setStatusAlterarCardapio(int statusAlterarCardapio) {
		this.statusAlterarCardapio = statusAlterarCardapio;
	}


	public List<AlimentoVO> getAlimentoEntityTable() {
		return alimentoEntityTable;
	}


	public void setAlimentoEntityTable(List<AlimentoVO> alimentoEntityTable) {
		this.alimentoEntityTable = alimentoEntityTable;
	}


	public boolean isStatusAltCompAlimentar() {
		return statusAltCompAlimentar;
	}


	public void setStatusAltCompAlimentar(boolean statusAltCompAlimentar) {
		this.statusAltCompAlimentar = statusAltCompAlimentar;
	}


	public String getDiasSemanaTable() {
		return diasSemanaTable;
	}


	public void setDiasSemanaTable(String diasSemanaTable) {
		this.diasSemanaTable = diasSemanaTable;
	}


	public int getStatusAtivaInativaCardapio() {
		return statusAtivaInativaCardapio;
	}


	public void setStatusAtivaInativaCardapio(int statusAtivaInativaCardapio) {
		this.statusAtivaInativaCardapio = statusAtivaInativaCardapio;
	}


	public boolean isStatusEditar() {
		return statusEditar;
	}


	public void setStatusEditar(boolean statusEditar) {
		this.statusEditar = statusEditar;
	}


	public boolean isStatusBtnAlterar() {
		return statusBtnAlterar;
	}


	public void setStatusBtnAlterar(boolean statusBtnAlterar) {
		this.statusBtnAlterar = statusBtnAlterar;
	}


	public Date getDtAtivacao() {
		return dtAtivacao;
	}


	public void setDtAtivacao(Date dtAtivacao) {
		this.dtAtivacao = dtAtivacao;
	}


//*************************************************************************************************************


}
